home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / quodlibet / ext / events / themeswitcher.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  7KB  |  177 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. import warnings
  5. import os
  6. from gi.repository import Gtk
  7. from quodlibet import qltk
  8. from quodlibet import config
  9. from quodlibet import const
  10. from quodlibet.qltk.ccb import ConfigCheckButton
  11. from quodlibet.plugins.events import EventPlugin
  12.  
  13. def has_header_bar_prop():
  14.     '''if gtk is recent enough to have the property'''
  15.     settings = Gtk.Settings.get_default()
  16.     return hasattr(settings.props, 'gtk_dialogs_use_header')
  17.  
  18.  
  19. def set_header_bar(value):
  20.     if not has_header_bar_prop():
  21.         return None
  22.     settings = None.Settings.get_default()
  23.     settings.set_property('gtk-dialogs-use-header', value)
  24.  
  25.  
  26. def get_header_bar():
  27.     if not has_header_bar_prop():
  28.         return False
  29.     settings = None.Settings.get_default()
  30.     return settings.get_property('gtk-dialogs-use-header')
  31.  
  32.  
  33. class ThemeSwitcher(EventPlugin):
  34.     PLUGIN_ID = 'Theme Switcher'
  35.     PLUGIN_NAME = _('Theme Switcher')
  36.     PLUGIN_DESC = _('Change the active GTK+ theme.')
  37.     __enabled = False
  38.     __defaults = False
  39.     CONFIG_THEME = PLUGIN_ID + '_theme'
  40.     CONFIG_DARK = PLUGIN_ID + '_prefer_dark'
  41.     CONFIG_HEADER_BAR = PLUGIN_ID + '_prefer_header_bar'
  42.     
  43.     def __init_defaults(self):
  44.         if self._ThemeSwitcher__defaults:
  45.             return None
  46.         self._ThemeSwitcher__defaults = None
  47.         settings = Gtk.Settings.get_default()
  48.         self._ThemeSwitcher__default_theme = settings.get_property('gtk-theme-name')
  49.         self._ThemeSwitcher__default_dark = settings.get_property('gtk-application-prefer-dark-theme')
  50.         self._ThemeSwitcher__default_header_bar = get_header_bar()
  51.  
  52.     
  53.     def PluginPreferences(self, *args):
  54.         self._ThemeSwitcher__init_defaults()
  55.         hb = Gtk.HBox(spacing = 6)
  56.         label = Gtk.Label(label = _('_Theme:'))
  57.         combo = Gtk.ComboBoxText()
  58.         theme = config.get('plugins', self.CONFIG_THEME, None)
  59.         combo.append_text(_('Default Theme'))
  60.         themes = self._ThemeSwitcher__get_themes()
  61.         select = 0
  62.         for i, name in enumerate(sorted(themes)):
  63.             combo.append_text(name)
  64.             if name == theme:
  65.                 select = i + 1
  66.                 continue
  67.         combo.set_active(select)
  68.         combo.connect('changed', self._ThemeSwitcher__changed)
  69.         dark_button = ConfigCheckButton(_('Prefer dark theme version'), 'plugins', self.CONFIG_DARK, populate = True, default = self._ThemeSwitcher__get_dark())
  70.         
  71.         def dark_cb(button):
  72.             self._ThemeSwitcher__set_dark(button.get_active())
  73.  
  74.         dark_button.connect('toggled', dark_cb)
  75.         hb_button = ConfigCheckButton(_('Use header bars'), 'plugins', self.CONFIG_HEADER_BAR, populate = True, default = self._ThemeSwitcher__get_header_bar())
  76.         
  77.         def hb_cb(button):
  78.             self._ThemeSwitcher__set_header_bar(button.get_active())
  79.  
  80.         hb_button.connect('toggled', hb_cb)
  81.         label.set_mnemonic_widget(combo)
  82.         label.set_use_underline(True)
  83.         hb.pack_start(label, False, True, 0)
  84.         hb.pack_start(combo, False, True, 0)
  85.         vbox = Gtk.VBox(spacing = 6)
  86.         vbox.pack_start(hb, False, True, 0)
  87.         vbox.pack_start(dark_button, False, True, 0)
  88.         vbox.pack_start(hb_button, False, True, 0)
  89.         return qltk.Frame(_('Preferences'), child = vbox)
  90.  
  91.     
  92.     def __changed(self, combo):
  93.         index = combo.get_active()
  94.         if not index or combo.get_active_text():
  95.             pass
  96.         name = ''
  97.         config.set('plugins', self.CONFIG_THEME, name)
  98.         self._ThemeSwitcher__set_theme(name)
  99.  
  100.     
  101.     def __get_themes(self):
  102.         with warnings.catch_warnings():
  103.             warnings.simplefilter('ignore')
  104.             theme_dir = Gtk.rc_get_theme_dir()
  105.         theme_dirs = [
  106.             theme_dir,
  107.             os.path.join(const.HOME, '.themes')]
  108.         themes = set()
  109.         for theme_dir in theme_dirs:
  110.             
  111.             try:
  112.                 subdirs = os.listdir(theme_dir)
  113.             except OSError:
  114.                 continue
  115.  
  116.             for dir_ in subdirs:
  117.                 gtk_dir = os.path.join(theme_dir, dir_, 'gtk-3.0')
  118.                 if os.path.isdir(gtk_dir):
  119.                     themes.add(dir_)
  120.                     continue
  121.         
  122.         return themes
  123.  
  124.     
  125.     def __set_theme(self, name):
  126.         if not self._ThemeSwitcher__enabled:
  127.             return None
  128.         settings = None.Settings.get_default()
  129.         themes = self._ThemeSwitcher__get_themes()
  130.         if not name in themes or name:
  131.             pass
  132.         name = self._ThemeSwitcher__default_theme
  133.         settings.set_property('gtk-theme-name', name)
  134.  
  135.     
  136.     def __set_dark(self, value):
  137.         if not self._ThemeSwitcher__enabled:
  138.             return None
  139.         settings = None.Settings.get_default()
  140.         if value is None:
  141.             value = self._ThemeSwitcher__default_dark
  142.         settings.set_property('gtk-application-prefer-dark-theme', value)
  143.  
  144.     
  145.     def __set_header_bar(self, value):
  146.         if not self._ThemeSwitcher__enabled:
  147.             return None
  148.         if None is None:
  149.             value = self._ThemeSwitcher__default_header_bar
  150.         set_header_bar(value)
  151.  
  152.     
  153.     def __get_header_bar(self):
  154.         return config.getboolean('plugins', self.CONFIG_HEADER_BAR, self._ThemeSwitcher__default_header_bar)
  155.  
  156.     
  157.     def __get_dark(self):
  158.         return config.getboolean('plugins', self.CONFIG_DARK, self._ThemeSwitcher__default_dark)
  159.  
  160.     
  161.     def enabled(self):
  162.         self._ThemeSwitcher__enabled = True
  163.         self._ThemeSwitcher__init_defaults()
  164.         theme = config.get('plugins', self.CONFIG_THEME, None)
  165.         self._ThemeSwitcher__set_theme(theme)
  166.         self._ThemeSwitcher__set_dark(self._ThemeSwitcher__get_dark())
  167.         self._ThemeSwitcher__set_header_bar(self._ThemeSwitcher__get_header_bar())
  168.  
  169.     
  170.     def disabled(self):
  171.         self._ThemeSwitcher__set_theme(None)
  172.         self._ThemeSwitcher__set_dark(None)
  173.         self._ThemeSwitcher__set_header_bar(None)
  174.         self._ThemeSwitcher__enabled = False
  175.  
  176.  
  177.